12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- "use client";
- import { useRef, useEffect, useState } from 'react';
- import styles from "./style.module.scss";
- const Lottery = () => {
- const canvasRef = useRef<any>(null);
- const [isSpinning, setIsSpinning] = useState(false);
- const [prize, setPrize] = useState('');
- const segments = ['一等奖', '二等奖', '三等奖', '四等奖', '五等奖', '六等奖', '七等奖', '八等奖'];
- // 4:1940,8:2120
- const segmentAngle = (2 * Math.PI) / segments.length;
- const drawWheel = () => {
- const canvas = canvasRef.current;
- const ctx = canvas.getContext('2d');
- const radius = canvas.width / 2;
- // 绘制背景图
- const backgroundImage = new Image();
- backgroundImage.src = '/wheel/spinBg.png'; // 替换为你的背景图路径
- backgroundImage.onload = () => {
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.drawImage(backgroundImage, 0, 0, canvas.width, canvas.height); // 绘制背景图
- ctx.save();
- ctx.translate(radius, radius);
- // 绘制奖项文本
- segments.forEach((segment, index) => {
- ctx.save();
- ctx.rotate(index * segmentAngle);
- ctx.fillStyle = '#fff'; // 文字颜色
- ctx.font = '16px Arial';
- ctx.fillText(segment, radius / 2, 8); // 适当调整位置
- ctx.restore();
- });
- ctx.restore();
- };
- };
- const spinWheel = () => {
- if (isSpinning) return;
- setIsSpinning(true);
- let rotation = 0;
- const spinDuration = 5000; // 旋转持续时间
- const stopAngle = Math.floor(Math.random() * segments.length) * (360 / segments.length) + 360 * 5; // 随机停下的角度
- const spinAnimation = (timestamp:any) => {
- rotation += 10; // 每次增加的角度
- canvasRef.current.style.transform = `rotate(${rotation}deg)`;
- if (rotation < stopAngle) {
- requestAnimationFrame(spinAnimation);
- } else {
- setIsSpinning(false);
- const winningSegment = Math.floor(((stopAngle % 360) / (360 / segments.length)));
- setPrize(segments[winningSegment]);
- }
- };
- requestAnimationFrame(spinAnimation);
- };
- useEffect(() => {
- drawWheel();
- }, []);
- return (
- <>
- <img src="/wheel/draw.png" className={`${styles.drawImg} ${styles.position}`} onClick={spinWheel}/>
- <div className={styles.drawContents}>
- <canvas ref={canvasRef} id={styles.draw} width={306} height={306} />
- </div>
-
- {/* <button onClick={spinWheel} disabled={isSpinning}>
- {isSpinning ? '正在抽奖...' : '抽奖'}
- </button> */}
- {/* {prize && <h2>恭喜您,中奖:{prize}</h2>} */}
- </>
- );
- };
- export default Lottery;
|